C语言学习记录:union(联合)、enum(枚举)、typedef

您所在的位置:网站首页 typedef union{long} C语言学习记录:union(联合)、enum(枚举)、typedef

C语言学习记录:union(联合)、enum(枚举)、typedef

2024-07-14 22:49:01| 来源: 网络整理| 查看: 265

本篇文章为 C primer plus 中文版(第六版) 14章阅读笔记

目录

union(联合)

联合定义变量

初始化联合

使用联合

枚举类型 (enumerated type)

枚举声明

枚举符的值

枚举使用

typedef 为某一类型自定义名称

指针问题、结构问题

union(联合)

union 是一种数据类型,能在同一个内存空间中存储不同的数据类型(不是同时储存)。

其典型用法:设计一种表以存储既无规律、事先也不知道顺序的混合类型。

使用联合类型的数组,其中的联合都大小相等,每个联合可以存储各种数据类型。

创建一个带标记的联合模板:

union hold{ int digit; double bigfl; char letter; }

和结构体不同!联合只能存储一个 int 或者 double 或者 char !

联合定义变量 union hold fit; union hold save[10]; union hold * pu;

说明:

第一个声明创建了一个单独的联合变量 fit 。编译器分配足够的空间以便它能存储联合声明中占用最大字节的类型。第二个声明创建了一个数组,内含 10 个元素,每个元素大小参照第一个声明的说明。第三个声明创建了一个指针 初始化联合 union hold valA; valA.letter = ‘R’; union hold valB = valA; // 用另一个联合来初始化 union hold valC = {88}; // 初始化联合的 digit 成员 unipn hold valD = {.bigfl = 118.2}; // 指定初始化器

说明:

union hold valC = {88}  这种没有指定初始化元素的默认初始化为联合的第一个元素。 使用联合 union hold{ int digit; double bigfl; char letter; } union hold fit; fit.digit = 23; fit.bigfl = 2.0; fit.letter = 'h';

 当使用指针:

union hold * pu; pu = &fit; x = pu->digit;

错误示例:

fit.letter = 'A'; flnum = 3.02 * fit.bigfl; //错误

fit 中存储的是 char 类型,读的时候却要读 double 类型,这不太行。

用联合定义结构体联合变量,可方便使用数据模板!(此处不赘述,用时再说,还是说吧)

租车问题,如果汽车没出租,用一个成员描述拥有者。如果汽车被出租,用一个成员描述租车公司

struct owner //拥有者 { char socsecurity[12]; //.................. }; struct leasecompany //租赁公司 { char name[40]; char headquarters[40]; //.................. }; union data { struct owner owncar; struct leasecompany leasecar; } struct car_data { char make[15]; int status; //表示租车状态,私有为0,租赁为1 union data ownerinfo; //.................. } struct car_data flits;

如果 flits.status 为0,程序使用 flits.ownerinfo.owncar.socsecurity 。

如果 flits.status 为1,则程序使用 flits.ownerinfo.leasecar.name 。

匿名联合和结构是差不多的。

struct owner //拥有者 { char socsecurity[12]; //.................. }; struct leasecompany //租赁公司 { char name[40]; char headquarters[40]; //.................. }; struct car_data { char make[15]; int status; //表示租车状态,私有为0,租赁为1 union { struct owner owncar; struct leasecompany leasecar; } //.................. } struct car_data flits;

可用 flits.owncar.socsecurity 代替 flits.ownerinfo.owncar.socsecurity 。

枚举类型 (enumerated type)

使用枚举类型声明符号名称来表示整形常量。

提高程序的可读性,语法与结构的语法相同。

枚举声明 enum spectrum {red,orange,yellow,green,blue,violet}; enum spectrum color;

第一行创建了 spectrum 作为标记名,允许把 enum spetrum 作为一个类型名使用。花括号内的标识符枚举了 spectrum 变量可能有的值。称为枚举符(enumerator)。

第二行声明了 color 作为该类型的变量。color 的值可能是 red、orange、yellow.... 。

枚举符的值 enum spectrum {red,orange,yellow,green,blue,violet};

这些标识符都是有名称的常量。

默认情况下 red = 0,orange = 1,violet = 5 。

可以为枚举常量设定指定值!

enum spectrum {red = 10,orange = 100,yellow = 1000};

或者:

enum spectrum {red,orange = 100,yellow};

此时,red = 0,orange = 100,yellow = 101 。

枚举使用

枚举常量可以直接当做 int 使用!

以下示例方法,都是可以使用的!

color ++ ; printf("red = %d\n",red); switch(color) { case red: return; } if(color == yellow) { }

typedef 为某一类型自定义名称

与 #define 不同, typedef 创建的符号名只受限于类型,不能用于值。

typedef unsigned char u_char; 指针问题、结构问题

真的什么都绕不过指针

typedef char * STRING; STRING name,sign; //相当于 char * name, * sign; //如果 #defin STRING char * STRING name,sign; //相当于 char * name, sign; //导致只有name被定义成指针

定义结构

typedef struct complex { float real; float imag; }COMPLEX;

就可以用 COMPLEX 类型代替 complex 结构。

还可以省略该结构的标签

typedef struct { float real; float imag; }COMPLEX;

typedef还用来声明复杂函数!

OK ~ 就到这吧!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭